#ifndef ServerFederateAmbassador_H_
#define ServerFederateAmbassador_H_

#pragma once

#include <RTI/RTI1516.h>
#include <RTI/NullFederateAmbassador.h>

using namespace rti1516;

class ServerFederateAmbassador :
	public NullFederateAmbassador
{
public:
	ServerFederateAmbassador(void);
	~ServerFederateAmbassador(void);

    // 6.3
    virtual
    void
    objectInstanceNameReservationSucceeded(std::wstring const &
                                           theObjectInstanceName)
      throw (UnknownName,
             FederateInternalError);

   // virtual
   // void
   // objectInstanceNameReservationFailed(std::wstring const &
   //                                     theObjectInstanceName)
   //   throw (UnknownName,
   //          FederateInternalError);

    // 6.5
   virtual void discoverObjectInstance (
      //ObjectInstanceHandle theObject,
      //ObjectClassHandle theObjectClass,
      std::wstring const & theObjectInstanceName)
/*      throw (
         CouldNotDiscover,
         ObjectClassNotKnown,
         FederateInternalError)*/;

    // 6.7
    virtual
    void
    reflectAttributeValues
    (/*ObjectInstanceHandle theObject,
     AttributeHandleValueMap const & theAttributeValues,
     VariableLengthData const & theUserSuppliedTag,
     OrderType sentOrder,
     TransportationType theType*/)
      throw (/*ObjectInstanceNotKnown,
             AttributeNotRecognized,
             AttributeNotSubscribed,
             FederateInternalError*/);

   // virtual
   // void
   // reflectAttributeValues
   // (ObjectInstanceHandle theObject,
   //  AttributeHandleValueMap const & theAttributeValues,
   //  VariableLengthData const & theUserSuppliedTag,
   //  OrderType sentOrder,
   //  TransportationType theType,
   //  RegionHandleSet const & theSentRegionHandleSet)
   //   throw (ObjectInstanceNotKnown,
   //          AttributeNotRecognized,
   //          AttributeNotSubscribed,
   //          FederateInternalError);

   // virtual
   // void
   // reflectAttributeValues
   // (ObjectInstanceHandle theObject,
   //  AttributeHandleValueMap const & theAttributeValues,
   //  VariableLengthData const & theUserSuppliedTag,
   //  OrderType sentOrder,
   //  TransportationType theType,
   //  LogicalTime const & theTime,
   //  OrderType receivedOrder)
   //   throw (ObjectInstanceNotKnown,
   //          AttributeNotRecognized,
   //          AttributeNotSubscribed,
   //          FederateInternalError);
  
   // virtual
   // void
   // reflectAttributeValues
   // (ObjectInstanceHandle theObject,
   //  AttributeHandleValueMap const & theAttributeValues,
   //  VariableLengthData const & theUserSuppliedTag,
   //  OrderType sentOrder,
   //  TransportationType theType,
   //  LogicalTime const & theTime,
   //  OrderType receivedOrder,
   //  RegionHandleSet const & theSentRegionHandleSet)
   //   throw (ObjectInstanceNotKnown,
   //          AttributeNotRecognized,
   //          AttributeNotSubscribed,
   //          FederateInternalError);
  
   // virtual
   // void
   // reflectAttributeValues
   // (ObjectInstanceHandle theObject,
   //  AttributeHandleValueMap const & theAttributeValues,
   //  VariableLengthData const & theUserSuppliedTag,
   //  OrderType sentOrder,
   //  TransportationType theType,
   //  LogicalTime const & theTime,
   //  OrderType receivedOrder,
   //  MessageRetractionHandle theHandle)
   //   throw (ObjectInstanceNotKnown,
   //          AttributeNotRecognized,
   //          AttributeNotSubscribed,
   //          InvalidLogicalTime,
   //          FederateInternalError);

   // virtual
   // void
   // reflectAttributeValues
   // (ObjectInstanceHandle theObject,
   //  AttributeHandleValueMap const & theAttributeValues,
   //  VariableLengthData const & theUserSuppliedTag,
   //  OrderType sentOrder,
   //  TransportationType theType,
   //  LogicalTime const & theTime,
   //  OrderType receivedOrder,
   //  MessageRetractionHandle theHandle,
   //  RegionHandleSet const & theSentRegionHandleSet)
   //   throw (ObjectInstanceNotKnown,
   //          AttributeNotRecognized,
   //          AttributeNotSubscribed,
   //          InvalidLogicalTime,
   //          FederateInternalError);


   // // 6.9
   // virtual
   // void
   // receiveInteraction
   // (InteractionClassHandle theInteraction,
   //  ParameterHandleValueMap const & theParameterValues,
   //  VariableLengthData const & theUserSuppliedTag,
   //  OrderType sentOrder,
   //  TransportationType theType)
   //   throw (InteractionClassNotRecognized,
   //          InteractionParameterNotRecognized,
   //          InteractionClassNotSubscribed,
   //          FederateInternalError);

   // virtual
   // void
   // receiveInteraction
   // (InteractionClassHandle theInteraction,
   //  ParameterHandleValueMap const & theParameterValues,
   //  VariableLengthData const & theUserSuppliedTag,
   //  OrderType sentOrder,
   //  TransportationType theType,
   //  RegionHandleSet const & theSentRegionHandleSet)
   //   throw (InteractionClassNotRecognized,
   //          InteractionParameterNotRecognized,
   //          InteractionClassNotSubscribed,
   //          FederateInternalError);

   // virtual
   // void
   // receiveInteraction
   // (InteractionClassHandle theInteraction,
   //  ParameterHandleValueMap const & theParameterValues,
   //  VariableLengthData const & theUserSuppliedTag,
   //  OrderType sentOrder,
   //  TransportationType theType,
   //  LogicalTime const & theTime,
   //  OrderType receivedOrder)
   //   throw (InteractionClassNotRecognized,
   //          InteractionParameterNotRecognized,
   //          InteractionClassNotSubscribed,
   //          FederateInternalError);

   // virtual
   // void
   // receiveInteraction
   // (InteractionClassHandle theInteraction,
   //  ParameterHandleValueMap const & theParameterValues,
   //  VariableLengthData const & theUserSuppliedTag,
   //  OrderType sentOrder,
   //  TransportationType theType,
   //  LogicalTime const & theTime,
   //  OrderType receivedOrder,
   //  RegionHandleSet const & theSentRegionHandleSet)
   //   throw (InteractionClassNotRecognized,
   //          InteractionParameterNotRecognized,
   //          InteractionClassNotSubscribed,
   //          FederateInternalError);

   // virtual
   // void
   // receiveInteraction
   // (InteractionClassHandle theInteraction,
   //  ParameterHandleValueMap const & theParameterValues,
   //  VariableLengthData const & theUserSuppliedTag,
   //  OrderType sentOrder,
   //  TransportationType theType,
   //  LogicalTime const & theTime,
   //  OrderType receivedOrder,
   //  MessageRetractionHandle theHandle)
   //   throw (InteractionClassNotRecognized,
   //          InteractionParameterNotRecognized,
   //          InteractionClassNotSubscribed,
   //          InvalidLogicalTime,
   //          FederateInternalError);

   // virtual
   // void
   // receiveInteraction
   // (InteractionClassHandle theInteraction,
   //  ParameterHandleValueMap const & theParameterValues,
   //  VariableLengthData const & theUserSuppliedTag,
   //  OrderType sentOrder,
   //  TransportationType theType,
   //  LogicalTime const & theTime,
   //  OrderType receivedOrder,
   //  MessageRetractionHandle theHandle,
   //  RegionHandleSet const & theSentRegionHandleSet)
   //   throw (InteractionClassNotRecognized,
   //          InteractionParameterNotRecognized,
   //          InteractionClassNotSubscribed,
   //          InvalidLogicalTime,
   //          FederateInternalError);


   // // 6.11
   // virtual
   // void
   // removeObjectInstance(ObjectInstanceHandle theObject,
   //                      VariableLengthData const & theUserSuppliedTag,
   //                      OrderType sentOrder)
   //   throw (ObjectInstanceNotKnown,
   //          FederateInternalError);

   // virtual
   // void
   // removeObjectInstance(ObjectInstanceHandle theObject,
   //                      VariableLengthData const & theUserSuppliedTag,
   //                      OrderType sentOrder,
   //                      LogicalTime const & theTime,
   //                      OrderType receivedOrder)
   //   throw (ObjectInstanceNotKnown,
   //          FederateInternalError);

   // virtual
   // void
   // removeObjectInstance(ObjectInstanceHandle theObject,
   //                      VariableLengthData const & theUserSuppliedTag,
   //                      OrderType sentOrder,
   //                      LogicalTime const & theTime,
   //                      OrderType receivedOrder,
   //                      MessageRetractionHandle theHandle)
   //   throw (ObjectInstanceNotKnown,
   //          InvalidLogicalTime,
   //          FederateInternalError);
};

#endif
